package cn.infrabase;

/**
 * @author Weimin Gao
 * @since 1.0.0
 **/
public enum Errors implements Error {

	// -----------------------------------------------------------------------------------------------------------------
	// cn.infrabase.base

	/**
	 * 未知错误
	 */
	UNKNOWN_ERROR("E00000-00000", "未知错误", "%s"),

	/**
	 * 断言错误
	 */
	ASSERT_ERROR("E00001-00001", "断言错误", "%s"),

	/**
	 * 全局标识无效
	 */
	GID_INVALID("E00001-00002", "全局标识无效", "全局标识【%s】无效"),

	// -----------------------------------------------------------------------------------------------------------------
	// cn.infrabase.core

	/**
	 * 解码错误
	 */
	DECODE_ERROR("E00002-00001", "解码错误", "%s"),

	/**
	 * 编码错误
	 */
	ENCODE_ERROR("E00002-00002", "编码错误", "%s"),

	/**
	 * IO错误
	 */
	IO_ERROR("E00002-00003", "IO错误", "%s"),

	/**
	 * 文件不存在
	 */
	FILE_NOT_EXIST("E00002-00004", "文件不存在", "文件【%s】不存在"),

	/**
	 * 字符集不支持
	 */
	CHARSET_NOT_SUPPORT("E00002-00005", "字符集不支持", "字符集【%】不支持"),

	/**
	 * 加载类错误
	 */
	LOAD_CLASS_ERROR("E00002-00006", "加载类错误", "加载类【%s】错误"),

	/**
	 * 反射操作错误
	 */
	REFLECTION_ERROR("E00002-00007", "反射操作错误", "%s"),

	/**
	 * 反射获取字段不存在
	 */
	REFLECTION_GET_FIELD_NOT_EXIST("E00002-00008", "反射获取字段不存在", "反射获取类【%s】中字段【%s】不存在"),

	/**
	 * 反射设置字段值错误
	 */
	REFLECTION_SET_FIELD_VALUE_ERROR("E00002-00009", "反射设置字段值错误", "反射设置对象【%s】字段【%s】值错误"),

	// -----------------------------------------------------------------------------------------------------------------
 	// cn.infrabase.crypto

	/**
	 * 加密错误
	 */
	CRYPTO_ERROR("E00003-00001", "加密错误", "%s"),

	/**
	 * 摘要算法不存在
	 */
	DIGEST_ALGORITHM_NOT_EXIST("E00003-00002", "摘要算法不存在", "摘要算法【%s】不存在"),

	/**
	 * 摘要算法不支持
	 */
	DIGEST_ALGORITHM_NOT_SUPPORT("E00003-00003", "摘要算法不支持", "摘要算法【%s】不支持"),

	// -----------------------------------------------------------------------------------------------------------------
	// cn.infrabase.token
	// cn.infrabase.token-jwt

	/**
	 * 令牌签名算法不支持
	 */
	TOKEN_SIGNATURE_ALGORITHM_NOT_SUPPORT("E00004-00001", "令牌签名算法不支持", "令牌签名算法【%s】不支持"),

	/**
	 * 生成令牌发生错误
	 */
	GENERATE_TOKEN_ERROR("E00004-00002", "生成令牌发生错误", "生成令牌发生错误"),

	/**
	 * 生成令牌签名密钥弱
	 */
	GENERATE_TOKEN_SIGNATURE_KEY_WEAK("E00004-00003", "生成令牌签名密钥弱", "生成令牌签名密钥弱"),

	/**
	 * 令牌签名密钥无效
	 */
	GENERATE_TOKEN_SIGNATURE_KEY_INVALID("E00004-00004", "令牌签名密钥无效", "令牌签名密钥无效"),

	/**
	 * 解析令牌发生错误
	 */
	PARSE_TOKEN_ERROR("E00004-00005", "解析令牌发生错误", "解析令牌发生错误"),

	/**
	 * 解析令牌格式不正确
	 */
	PARSE_TOKEN_MALFORMED("E00004-00006", "解析令牌格式不正确", "解析令牌格式不正确"),

	/**
	 * 解析令牌签名不匹配
	 */
	PARSE_TOKEN_SIGNATURE_NOT_MATCH("E00004-00007", "解析令牌签名不匹配", "解析令牌签名不匹配"),

	/**
	 * 解析令牌已过期
	 */
	PARSE_TOKEN_EXPIRED("E00004-00008", "解析令牌已过期", "解析令牌已过期"),

	/**
	 * 刷新令牌发生错误
	 */
	REFRESH_TOKEN_EXPIRED("E00004-00009", "刷新令牌发生错误", "刷新令牌发生错误");


	// -----------------------------------------------------------------------------------------------------------------

	private final String code;

	private final String desc;

	private final String detail;

	Errors(String code, String desc, String detail) {
		this.code = code;
		this.desc = desc;
		this.detail = detail;
	}

	@Override
	public String code() {
		return code;
	}

	@Override
	public String desc() {
		return desc;
	}

	@Override
	public String detail() {
		return detail;
	}
}
